Uncategorized
33k words
分组密码(Block Ciphers)— 系统化课堂笔记 本笔记基于 Dan Boneh 密码学课程分组密码章节的全部内容,按照逻辑递进关系重新组织: 基础定义 → 迭代构造 → PRF/PRP 理论抽象(核心)→ DES 完整解析 → AES 完整解析 → 攻击方法全景 → PRG→PRF→PRP 理论构造 → 计数器模式应用 → 实战对比。 阅读指引:每节先给出直觉理解(“这个概念的物理意义是什么”),再给出形式化定义(“如何用数学语言精确描述”),最后串联前后逻辑(“为什么这个概念重要,它和前后内容的关系是什么”)。 适配软件工程本科基础薄弱视角,对所有关键概念进行通俗解释和详细展开,补充大量具体数值示例帮助理解。 第一部分:分组密码基础定义 1.1 什么是分组密码 — 从流密码到分组密码 1.1.1 回顾:流密码的工作方式 在流密码中,加密过程是: c = m ⊕ G(k) 其中 G(k) 是 PRG(伪随机生成器)从短种子 k 扩展出的长密钥流。特点是: - 逐比特处理:明文的每一比特独立与密钥流 XOR - 无固定分组:消息可以是任意长度,PRG 生成对应长度的...
Uncategorized
15k words
流密码(Stream Ciphers)— 系统化课堂笔记 本笔记基于 Dan Boneh 密码学课程流密码章节的内容,按照逻辑递进关系重新组织: 基础定义 → 理想模型(OTP)→ 动机与思路(流密码诞生)→ PRG 理论(核心)→ 安全定义(语义安全)→ 实战案例。 每节先给直觉,再给形式化定义,最后串联前后逻辑。 第一部分:基础概念 1.1 对称加密的定义 一个对称加密方案由以下要素构成: 三元组 (𝒦,ℳ,𝒞): 𝒦:密钥空间(所有可能密钥的集合) ℳ:明文空间(所有可能明文的集合) 𝒞:密文空间(所有可能密文的集合) 二元组 (ℰ,𝒟): ℰ:加密算法(通常是随机算法) 𝒟:解密算法(通常是确定算法) 形式化表达: ℰ : 𝒦 × ℳ → 𝒞,   𝒟 : 𝒦 × 𝒞 → ℳ 且必须满足正确性要求——解密必须还原加密: ∀m ∈ ℳ, ∀k ∈ 𝒦:  𝒟(k, ℰ(k,m)) = m 💡 与一般密码的区别:对称加密比普通密码多一个密钥生成算法 𝒢,用于安全地生成密钥。 第二部分:理想模型 — 一次一密(One-Ti...
Uncategorized
5.5k words
In the town of Digitville, there was a list of numbers called nums containing integers from 0 to n - 1. Each number was supposed to appear exactly once in the list, however, two mischievous numbers sneaked in an additional time, making the list longer than usual. As the town detective, your task is to find these two sneaky numbers. Return an array of size two containing the two numbers (in any order), so peace can return to Digitville. Example: Input: nums = [0,1,1,0] Output: [0,1] Explanat...
Uncategorized
1.3k words
KISS 原则 KISS原则有以下三种经典的解释: Keep It Simple and Stupid. Keep It Short and Simple. Keep It Simple and Straightforward. 越底层封装成都越高、改动越少的模块可以更优先考虑性能,代码逻辑复杂可以接受。越上层改动越多的代码尽可能的要提升可读性。并非代码行数越少越好。 如何写出满足 KISS 原则的代码? 不要使用同事可能不懂的技术来实现代码。比如前面例子中的正则表达式,还有一些编程语言中过于高级的语法等。 不要重复造轮子,要善于使用已经有的工具类库。经验证明,自己去实现这些类库,出 bug 的概率会更高,维护的成本也比较高。 不要过度优化。不要过度使用一些奇技淫巧(比如,位运算代替算术运算、复杂的条件语句代替 if-else、使用一些过于底层的函数等)来优化代码,牺牲代码的可读性。 YAGNI 原则 You Ain’t Gonna Need It 不要去设计当前用不到的功能;不要去编写当前用不到的代码,不要做过度设计。 比如,我们的系统暂时只用 Redis 存储配置...
Uncategorized
17k words
二、SOLID 原则 SOLID 原则并非单纯的 1 个原则,而是由 5 个设计原则组成的,它们分别是:单一职责原则、开闭原则、里式替换原则、接口隔离原则和依赖反转原则,依次对应 SOLID 中的 S、O、L、I、D 这 5 个英文字母。 单一职责原则(SRP):A class or module should have a single reponsibility 我们可以先写一个粗粒度的类,满足业务需求。随着业务的发展,如果粗粒度的类越来越庞大,代码越来越多,这个时候,我们就可以将这个粗粒度的类,拆分成几个更细粒度的类。这就是所谓的持续重构 存疑,在项目变复杂的情况下拆分类似乎代价也不小。 可参考的一些原则: 类中的代码行数、函数或属性过多,会影响代码的可读性和可维护性,我们就需要考虑对类进行拆分; 类依赖的其他类过多,或者依赖类的其他类过多,不符合高内聚、低耦合的设计思想,我们就需要考虑对类进行拆分; 私有方法过多,我们就要考虑能否将私有方法独立到新的类中,设置为public方法,供更多的类使用,从而提高代码的复用性; 比较难给类起一个合适名字,很难用一个业务名词概括...
Uncategorized
317 words
文献阅读核心要点梳理表 文献信息 - 标题: - 作者: - 年份/出处: - 阅读日期: 核心要点梳理 要点维度 核心问题 我的记录 1. 研究背景与问题 作者试图解决什么具体问题?为什么这个问题重要? 2. 创新点与价值 这篇论文的独特贡献是什么?(新方法、新理论、新发现?) 3. 理论基础 基于哪些已有理论?核心概念是如何定义的? 4. 研究方法 研究是如何设计的?(数据来源、实验步骤、分析工具?) 5. 核心发现 得到了什么关键数据、实验结果或分析结论? 6. 结论与讨论 这些发现意味着什么?是否回答了研究问题? 7. 局限与展望 作者承认了哪些局限性?提出了哪些未来方向? 8. 学术关联 这篇文献与我的研究有何关联?(支撑、启发、挑战?) 总结与思考 一句话总结: 启发与收获: 待查证/存疑之处:
Uncategorized
1.2k words
文献信息 标题: Attention Is All You Need 作者: Ashish Vaswani, Noam Shazeer, Niki Parmar, et al.  年份/出处: 2017, NIPS (现 NeurIPS) 阅读日期: 2025/10/07 核心要点梳理 要点维度 核心问题 我的记录 1. 研究背景与问题 作者试图解决什么具体问题?为什么这个问题重要? 主流的序列转换模型(如机器翻译)依赖于复杂的循环或卷积神经网络。这些模型的顺序计算特性(RNN需逐步计算)限制了训练时的并行能力,导致训练速度慢,尤其在长序列上。 2. 创新点与价值 这篇论文的独特贡献是什么?(新方法、新理论、新发现?) 提出了 Transformer 模型,其核心创新在于完全摒弃了循环和卷积结构,仅依赖自注意力机制来建模全局依赖关系。这不仅在翻译质量上达到了新高度,更重要的是实现了极强的并行化,大幅减少了训练时间。 3. 理论基础 基于哪些已有理论?核心概念是如何定义的? 基于编码器-解码器架构和注意力机制。核心概念是 “自注意力” 和 “...
Uncategorized
4.2k words
学习周期与目标规划 第 1-2 周:补 OOP 基础和 SOLID 原则,看完《Head First 设计模式》前 5 章(核心创建型模式)。 第 3-4 周:学结构型模式,完成 “代理、装饰器、适配器” 的代码练习,并用它们重构一段旧代码。 第 5-6 周:学行为型模式,聚焦 “观察者、策略、模板方法”,在小项目中刻意使用至少 3 种模式。 第 7-8 周:回顾 23 种模式,整理 “模式对比表”(如 “装饰器 vs 代理”“工厂方法 vs 抽象工厂”),避免混淆。 长期:在工作 / 项目中,遇到问题时先思考 “是否有对应的设计模式”,逐步形成 “模式思维”。 一、OOP基础 面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。 面向对象编程(OOP)。跟面向对象编程经常放到一块儿来讲的还有另外两个概念,那就是面向对象分析(OOA)和面向对象设计(OOD)...